/**
 * Copyright (C) 2013 DaiKit.com - daikit4gxt module (admin@daikit.com)
 *
 *         Project home : http://code.daikit.com/daikit4gxt
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// $Id$
package com.daikit.daikit4gxt.client.ui.grid;

import com.daikit.daikit4gxt.client.ui.cell.DkNullSafeCell;
import com.daikit.daikit4gxt.client.ui.comparator.DkNullSafeComparator;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.sencha.gxt.core.client.ValueProvider;
import com.sencha.gxt.widget.core.client.grid.ColumnConfig;


/**
 * @author tcaselli
 * @version $Revision$ Last modifier: $Author$ Last commit: $Date$
 * @param <BEAN_TYPE>
 *           the bean type
 * @param <COLUMN_TYPE>
 *           the column type
 */
public abstract class DkNullSafeColumnConfig<BEAN_TYPE, COLUMN_TYPE> extends ColumnConfig<BEAN_TYPE, COLUMN_TYPE>
{

	/**
	 * Constructor wrapper
	 * 
	 * @param valueProvider
	 */
	public DkNullSafeColumnConfig(final ValueProvider<? super BEAN_TYPE, COLUMN_TYPE> valueProvider)
	{
		super(valueProvider);
		initialize();
	}

	/**
	 * Constructor wrapper
	 * 
	 * @param valueProvider
	 * @param width
	 */
	public DkNullSafeColumnConfig(final ValueProvider<? super BEAN_TYPE, COLUMN_TYPE> valueProvider, final int width)
	{
		super(valueProvider, width);
		initialize();
	}

	/**
	 * Constructor wrapper
	 * 
	 * @param valueProvider
	 * @param width
	 * @param header
	 */
	public DkNullSafeColumnConfig(final ValueProvider<? super BEAN_TYPE, COLUMN_TYPE> valueProvider, final int width,
			final SafeHtml header)
	{
		super(valueProvider, width, header);
		initialize();
	}

	/**
	 * Constructor wrapper
	 * 
	 * @param valueProvider
	 * @param width
	 * @param header
	 */
	public DkNullSafeColumnConfig(final ValueProvider<? super BEAN_TYPE, COLUMN_TYPE> valueProvider, final int width,
			final String header)
	{
		super(valueProvider, width, header);
		initialize();
	}

	/**
	 * Initialize cell and comparator
	 */
	protected void initialize()
	{
		setCell(new DkNullSafeCell<COLUMN_TYPE>()
		{
			@Override
			protected final String toString(final COLUMN_TYPE value)
			{
				return DkNullSafeColumnConfig.this.toString(value);
			}
		});
		setComparator(new DkNullSafeComparator<COLUMN_TYPE>()
		{
			@Override
			protected String toString(final COLUMN_TYPE value)
			{
				return DkNullSafeColumnConfig.this.toString(value);
			}
		});
	}

	protected abstract String toString(COLUMN_TYPE value);

}
